/**
 * 2017，thor.com，all rights reserved。
 * 
 * Project：		palmmall-core
 * Filename：	SalesRptDao.java
 * Created：		2017年4月27日
 * Creator：		wolv
 */
package com.thor.palmmall.dao.rpt.sales;

import java.util.Date;
import java.util.List;

import com.thor.commons.exception.ThorServiceException;
import com.thor.palmmall.api.rpt.Report;
import com.thor.palmmall.api.rpt.sales.DailySalesReportParam;
import com.thor.palmmall.api.rpt.sales.MonthSalesReport;

/**
 * @author wolv
 *
 */
public interface SalesRptDao {

  /**
   * 计算每日报表
   * 
   * @param param
   * @return
   * @throws ThorServiceException
   */
  Report calcDailyReport(DailySalesReportParam param) throws ThorServiceException;

  /**
   * 计算销售报表
   * 
   * @param param
   * @return
   * @throws ThorServiceException
   */
  Report calcDailySalesReport(DailySalesReportParam param) throws ThorServiceException;

  /**
   * 计算每日销售报表
   * 
   * @param param
   * @return
   * @throws ThorServiceException
   */
  Report calcMonthSalesReport(DailySalesReportParam param) throws ThorServiceException;

  /**
   * 获取某项目最早的销售日期
   * 
   * @param storeId
   * @return
   */
  Date getEarliestReportByStoreId(String storeId);

  /**
   * 获取项目历史销售报表最新日期
   * 
   * @param storeId
   * @return
   */
  Date getLastestReportByStoreId(String storeId);

  /**
   * 保存月销售统计记录
   * 
   * @param report
   */
  void saveSalesReport(PMonthSalesReport report);

  /**
   * 查询所有项目id
   */
  List<String> queryAllStoreIds();

  /**
   * 根据条件查询月销售记录
   * 
   * @param param
   * @return
   */
  List<PMonthSalesReport> queryMonthReport(DailySalesReportParam param);

  /**
   * 查询指定月所有楼层的销售数据
   * 
   * @param
   * @return
   */
  List<PMonthSalesReport> querySalesReportByMonth(DailySalesReportParam param);

  /**
   * 计算楼层月销售报表
   * 
   * @param param
   * @return
   */
  Report calcFloorMonthSalesReport(DailySalesReportParam param);

}
